/*
 *  AnimMixer.h
 *  glow
 *
 *  Created by sunjun on 11-6-14.
 *  Copyright 2011 sunstdio. All rights reserved.
 *
 */
//////////////////////////////////////////////////////////////////////////

#ifndef __AnimMixer__
#define __AnimMixer__

//////////////////////////////////////////////////////////////////////////

#if defined __cplusplus

//////////////////////////////////////////////////////////////////////////

#include <GReference.h>

//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN(Engine)

//////////////////////////////////////////////////////////////////////////

	// this class provides an object-oriented animation mixer interface.
	class AnimMixer
	{
	public:
		// constructor
		AnimMixer();
		
		// destructor
		virtual ~AnimMixer();

		// bind the root bone
		VOID Bind(const AnimBone* root);
	
		// play the action
		VOID Play(const CHAR* name);

		// mix the action
		VOID Mix(const CHAR* name);

		// the mixer tick
		VOID Tick(F32 delta_time);

	protected:
		std::map<Str,AnimSequencePtr>mSequences;
		AnimSequence*mPresent;
		std::list<AnimSequence*>mQueue;
		AnimBone* mRoot;

	private: friend class Pawn;
	};

//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////

#endif // __cplusplus

//////////////////////////////////////////////////////////////////////////

#endif // __AnimMixer__

//////////////////////////////////////////////////////////////////////////